In video streaming, a customer has a set of inflexible constraints, such as a local network and device capabilities. Customers also have a set of flexible system characteristics which may be modified, for example: which CDN (content delivery network) to fetch video from; which specific network edge to select and, in some cases, which server to fetch the video from; which bitrate or bitrates (both audio and video) to fetch; which protocol to use; which packaging or streaming technology to use; and so forth.
A goal is to deliver a quality playback experience for the customer. Conventionally, the solution for providing a quality video playback experience has been based on a reactive heuristic model—start with a reasonably educated guess for selecting network configurations, and then, based on observed performance, modify those parameters that are flexible in order to improve or maintain the customer experience. The fundamental problems with this approach include: that this solution is reactive, rather than pro-active; that some of the variable parameters are not variable after stream initiation (packaging format or streaming technology may unavoidably cause a video interruption, for example); and local optimization does not always produce the best experience for the local user or across all users on average.
Current systems react dynamically to CDN failure by choosing different CDNs. However, CDN selection is either done server-side on a statistical basis (e.g., allocation of streams according to some concept of ‘balance’ on a percentile basis) or client-side based on local observed conditions.